package com.sans.collection;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

/**
 * @author Sans
 */
public class ListTest {
    @Test
    public void build() {
        // 创建一个初始容量为20的String泛型的ArrayList
        List<String> arrayList = new ArrayList<>(20);

        // 向ArrayList追加国家
        arrayList.add("葡萄牙");
        arrayList.add("西班牙");
        arrayList.add("比利时");
        arrayList.add("阿根廷");

        // 在0号位添加一个英格兰，其余元素依次向后移动一个位置
        arrayList.add(0, "英格兰");

        // 将英格兰修改为苏格兰
        arrayList.set(0, "苏格兰");

        // 使用forEach来遍历list
        for (String e : arrayList) {
            System.out.println(e);
        }

        // 使用fori来遍历list
        for (int i = 0, j = arrayList.size(); i < j; i++) {
            System.out.println(i + ":" + arrayList.get(i));
        }

        // 将阿根廷删除
        if (arrayList.contains("阿根廷")) {
            arrayList.remove("阿根廷");
        }

        // 将3号元素删除
        arrayList.remove(3);

        // ArrayList是可以直接打印查看的
        System.out.println(arrayList);

        // 清空列表
        arrayList.clear();

        // 查看ArrayList是否为空
        System.out.println(arrayList.isEmpty() ? "list为空" : "list不为空");

        // 快速创建一个list接口（不是ArrayList）
        List<String> countries = List.of("葡萄牙", "西班牙", "比利时", "阿根廷");

        // 将list转成数组（只能转成Object数组）
        Object[] countriesArr = countries.toArray();
        System.out.println(Arrays.toString(countriesArr));
    }

    @Test
    public void linkedList() {
        LinkedList<String> linkedList = new LinkedList<>();

        // 追加
        linkedList.add("Korea");
        linkedList.add("Japan");

        // 首部添加，返回void
        linkedList.addFirst("China");

        // 尾部添加，返回void
        linkedList.addLast("Thailand");

        // 首部添加，返回boolean，1.6
        linkedList.offerFirst("US");

        // 尾部添加，返回boolean，1.6
        linkedList.offerLast("UK");

        // 首部添加：底层调用addFirst()
        linkedList.push("Congo");
        System.out.println("add over" + linkedList);

        // 取出0号位元素
        System.out.println(linkedList.get(0));

        // 返回首位元素
        System.out.println(linkedList.getFirst());

        // 返回最后一个元素
        System.out.println(linkedList.getLast());

        // 查看链表头
        System.out.println(linkedList.peekFirst());

        // 查看链表尾
        System.out.println(linkedList.peekLast());

        // 将1号元素替换为France
        linkedList.set(1, "France");
        System.out.println(linkedList);

        // 弹出链表头，若不存在则返回null
        System.out.println(linkedList.pollFirst());

        // 弹出链表尾
        System.out.println(linkedList.pollLast());

        // 弹出链表头，若不存在抛异常
        System.out.println(linkedList.pop());

        // 删除0号元素
        System.out.println(linkedList.remove(0));

        // 删除France
        System.out.println(linkedList.remove("France"));

        // 移除链表头
        System.out.println(linkedList.removeFirst());

        // 移除链表尾
        System.out.println(linkedList.removeLast());

        // for-i遍历
        for (int i = 0, j = linkedList.size(); i < j; i++) {
            System.out.println(i + ":" + linkedList.get(i));
        }

        // for-e遍历
        for (String e : linkedList) {
            System.out.println("e: " + e);
        }
    }
}
